package com.xuecheng.media.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.api.media.model.dto.MediaDTO;
import com.xuecheng.common.domain.code.CommonErrorCode;
import com.xuecheng.common.enums.common.AuditEnum;
import com.xuecheng.common.enums.common.CommonEnum;
import com.xuecheng.common.exception.ExceptionCast;
import com.xuecheng.media.entity.Media;
import com.xuecheng.media.mapper.MediaMapper;
import com.xuecheng.media.service.MediaAuditService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

/**
 * 媒资审核微服务
 *
 * @author lily
 * @date 2021/12/15
 */
@Slf4j
@Service
public class MediaAuditServiceImpl extends ServiceImpl<MediaMapper, Media> implements MediaAuditService {


    /**
     * 运营平台媒资审核
     *
     * @param dto dto
     * @author Lily
     * @date 2021/12/15 22:07
     * @paramType [com.xuecheng.api.media.model.dto.MediaDTO]
     * @description 业务分析：
     * 1.关键数据
     * 2.业务数据
     * 审核通过的视频不可以审核
     * 审核过后只能为审核通过和审核不通过
     * 3.更新数据库数据
     */
    @Transactional
    @Override
    public void mediaAudit(MediaDTO dto) {

        // TODO id不必填？1.关键数据
        if (ObjectUtils.isEmpty(dto.getId())) {
            ExceptionCast.cast(CommonErrorCode.E_110006);
        }

        // 判断审核状态
        if (AuditEnum.AUDIT_UNPAST_STATUS.equals(dto.getAuditStatus())) {
            ExceptionCast.cast(CommonErrorCode.E_110011);
        }

        // 2.业务数据
        //   审核通过的视频不可以审核
        LambdaQueryWrapper<Media> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Media::getId, dto.getId());
        // TODO 一定要转类型
        queryWrapper.eq(Media::getStatus, CommonEnum.USING_FLAG.getCode());
        Media media = this.getOne(queryWrapper);

        if (ObjectUtils.isEmpty(media)) {
            ExceptionCast.cast(CommonErrorCode.E_100104);
        }

        // TODO 如果状态为审核通过，和审核未通过，不可以审核？？？
        if (AuditEnum.AUDIT_PASTED_STATUS.equals(media.getAuditStatus()) ||
                AuditEnum.AUDIT_DISPAST_STATUS.equals(media.getAuditStatus())
        ) {
            ExceptionCast.cast(CommonErrorCode.E_110010);
        }

        //   审核过后只能为审核通过和审核不通过
        LambdaUpdateWrapper<Media> updateWrapper = new LambdaUpdateWrapper<>();
        // 审核内容
        updateWrapper.set(Media::getAuditMind, dto.getAuditMind());
        // 审核状态
        updateWrapper.set(Media::getAuditStatus, dto.getAuditStatus());
        // 修改的数据id
        updateWrapper.eq(Media::getId, dto.getId());

        // 3.更新数据库数据
    }
}